# 利用map批量检测用户名是否符合规范
# = > username符合规范,
# username不符合规范
# •只能包含数据、字母、下划线，不以数字开头，长度在6 - 18
# 之间 filter把合法的用户名显示出来
lst = ["username","a123","Y_78ju","23hu","was23_67hu"]
import re
def func1(x):
    if re.findall(r"^[a-zA-Z_][0-9a-zA-Z_]{5,17}$", x):
        return f"{x}符合规范"
    else:
        return f"{x}不符合规范"
print(list(map(func1, lst)))



# 匿名函数+reduce实现 1*2*3*...*n
from functools import reduce
n=[1,2,3,4,5,6,7]
print(reduce(lambda n,y:n*y, n))

# filter函数:找出[1-100]能被3整除的数
print(list(filter(lambda x:x%3==0, range(1,101))))

# map函数:求list[1-10]各项的平方
print(list(map(lambda x:x*x, range(1,11))))

# 有以下列表：
list1=[7, -8, 5, 4, 0, -2, -5]
# •正数在前负数在后
# •整数从小到大
# •负数从大到小
# print(list(sorted(list1, key=lambda x:x * -10 if x <= 0 else x)))
print(list(sorted(list1,key=lambda x:(x<0, abs(x)))))

# 这是一个字符串排序，排序规则：小写<大写<奇数<偶数
# •s = 'asdf234GDSdsf23' #排序:小写-大写-奇数-偶数
 # •原理：先比较元组的第一个值，FALS
s = 'asdf234GDSdsf23'
s2 = "".join(sorted(s, key=lambda x: (x.isdigit(),x.isdigit() and int(x) % 2 == 0,x.isupper(),x)))
print(s2)

def func2(x):
    return (x.isdigit() ,x.isupper(),x.isdigit() and int(x) % 2 == 0,x)
print("".join(sorted(s, key=func2)))

# 查找一个文件中最长的行，输出长度
# •考虑文件比较大
# •考虑代码精简
# •生成一个大文件
import string
import random
with open('big.data', 'w+', encoding="utf-8") as f:
    f.write()
